package controlador;



import controlador.ControladorRegistrarNadadores;


import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.ActionEvent;
import java.io.FileNotFoundException;
import javax.swing.SwingConstants;
import javax.swing.JButton;
import vista.VentanaRegistrarEquipo;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.LinkedList;
import java.util.Locale;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import modelo.Equipo;
import modelo.Nadador;



public class ControladorRegistrarEquipo  implements ActionListener,KeyListener{
    
    private VentanaRegistrarEquipo ventaEqui;
    private Component areaTexto;
   
    
    public ControladorRegistrarEquipo(){
       ventaEqui= new VentanaRegistrarEquipo();
       ventaEqui.addListener((ActionListener)this);
       ventaEqui.addListener((KeyListener)this);
       ventaEqui.addKeyListener(this);
       ventaEqui.setMedallasBronce(0);
       ventaEqui.setMedallasOro(0);
       ventaEqui.setMedallasPlata(0);
       ventaEqui.estadoBotonRegistrar(false);
       ventaEqui.estadoBotonModificar(false);
       ventaEqui.estadoBotonEliminar(false);
        
        }
         
    
    
public static LinkedList<Equipo> ListaEquipo= new LinkedList<Equipo>();
 
public void agregarEquipo(String codigoEqi, String ano,String pais,int cantMedallasOro, int cantMedallasPlata, int cantMedallasBronce,String nombreEntrenador) {
       
        Equipo equi=new Equipo();
        equi.setAno(ano);
        equi.setCantMedallasBronce(cantMedallasBronce);
        equi.setCantMedallasPlata(cantMedallasPlata);
        equi.setCantMedallasOro(cantMedallasOro);
        equi.setNombre_entrenador(nombreEntrenador);
        equi.setPais(pais);
        equi.setCodigoEqi(codigoEqi);
        ListaEquipo.add(equi);
        
      
}   
   public  Equipo buscarEquipo(String cod)
 {
  boolean encon=false;
  Equipo equi=null;
   String codi;
   int j;
  for (j = 0; j <  ListaEquipo.size() && !encon; j++) 
   {
     equi=(Equipo)ListaEquipo.get(j);
     codi=equi.getCodigoEqi();
    
     if (codi.equals(cod.trim())) 
       encon=true;  
       
   }   
    
   if (encon)
     return equi;     
   else
     return null;  
       
  }
     



     public void actionPerformed(ActionEvent evt) {
        
        if (evt.getSource() instanceof JButton)
         { 
             Equipo equi =new Equipo();
             JButton boton= (JButton) evt.getSource();
             
                 if (boton.getActionCommand().equals("Registrar")){
                      if(ventaEqui.getCodEquipo().length()==0 ){
         
                        vista.MensajesGenerales.mostrarMensajeErrores("Ingrese el codigo");
             
                      } else{
                          
                           equi=buscarEquipo(ventaEqui.getCodEquipo());
                           if(validar()){
                             if (equi==null){
                               
                         agregarEquipo(ventaEqui.getCodEquipo(),ventaEqui.getAnoFed(),ventaEqui.getPais(), ventaEqui.getMedallasOro(), ventaEqui.getMedallasPlata(),ventaEqui.getMedallasBronce(),ventaEqui.getEntrenador());
                         vista.MensajesGenerales.mostrarMensaje("Equipo registrado con exito");
                           ventaEqui.estadoBotonRegistrar(false);
                         ventaEqui.estadoBotonNadadores(true);
                         ventaEqui.estadoBotonEliminar(true);
                         ventaEqui.estadoBotonModificar(true);
                     
                         equi=buscarEquipo(ventaEqui.getCodEquipo());
                                 if (vista.MensajesGenerales.mostrarMensajeCuestionSiNo("Desea Agregar jugadores al equipo creado")== JOptionPane.YES_OPTION){
                            
                                 new ControladorRegistrarNadadores(equi);
                                 }
                                 }
                              
                                } 
                              
                              }
                          } 
                 if (boton.getActionCommand().equals("Cancelar")){

                                        ventaEqui.limpiar();
                                        ventaEqui.setCodEquipo(null);
                                        ventaEqui.estadoBotonNadadores(false);
                                      }
                                     if (boton.getActionCommand().equals("Salir")){

                                     ventaEqui.dispose();
                                       }
                            if (boton.getActionCommand().equals("Modificar")){
                             if(ventaEqui.getCodEquipo().length()==0 ){
                                   vista.MensajesGenerales.mostrarMensajeErrores("Ingrese el codigo");
             
                             }else{
                                 equi=buscarEquipo(ventaEqui.getCodEquipo());
        
                                 
                                 if (equi!=null){
                                 
                                 modificarEquipo(ventaEqui.getCodEquipo(),ventaEqui.getAnoFed(),ventaEqui.getPais(),ventaEqui.getEntrenador());
                                 ventaEqui.limpiar();        
                            } 
                            }    
                            }           
                            if (boton.getActionCommand().equals("Eliminar")){
                             if(ventaEqui.getCodEquipo().length()==0 ){
                                   vista.MensajesGenerales.mostrarMensajeErrores("Ingrese el codigo");
             
                                }else{ 
                                 equi=buscarEquipo(ventaEqui.getCodEquipo());
        
                                 
                                 if (equi!=null){
                            
                                     eliminarEquipo(ventaEqui.getCodEquipo());
                                     ventaEqui.limpiar();
                                     
                             }  
                            } 
                            }
                             if (boton.getActionCommand().equals("Cargar Nadadores ")){
                                   equi=buscarEquipo(ventaEqui.getCodEquipo());
                                   cargarNadadoresTxt(equi);
                             
                             
                             }
        
         }
     }         
     
     public void keyPressed(KeyEvent e) {
       if (e.getKeyCode()==KeyEvent.VK_ENTER)
       {
      
        if(ventaEqui.getCodEquipo().length()==0 ){
         
       vista.MensajesGenerales.mostrarMensajeErrores("Ingrese la cedula");
         }else{
        
    
         buscarEquipo();
        }
       }   
          
     }
    public void keyTyped(KeyEvent e) {
    
    
     String campo;
           campo=ventaEqui.getCodEquipo();
        char caracter = e.getKeyChar();
        if( caracter < '0' || caracter > '9') 
      
            e.consume(); 
        else
            if (campo.length()==6)
               e.consume();
    
    }
        

    public void keyReleased(KeyEvent e) {}
      
    
    
    
    void buscarEquipo(){
       Equipo equi=new Equipo();
        equi=buscarEquipo(ventaEqui.getCodEquipo());
        
        if (equi!=null){
             ventaEqui.limpiar();
             ventaEqui.setPais(equi.getPais());
             ventaEqui.setCodEquipo(equi.getCodigoEqi());
             ventaEqui.setAnoFed(equi.getAno());
             ventaEqui.setEntrenador(equi.getNombre_entrenador());
             ventaEqui.setMedallasBronce(equi.getCantMedallasBronce());
             ventaEqui.setMedallasOro(equi.getCantMedallasOro());
             ventaEqui.setMedallasPlata(equi.getCantMedallasPlata());
             ventaEqui.estadoBotonNadadores(true);
           
            ventaEqui.estadoBotonRegistrar(false);
            ventaEqui.estadoBotonModificar(true);
            ventaEqui.estadoBotonEliminar(true);
        
        }

else{
           vista.MensajesGenerales.mostrarMensajeCuestion("No Existe ,Desea Registrar");
          ventaEqui.focusNombre();
          ventaEqui.estadoBotonNadadores(false);
          ventaEqui.estadoBotonRegistrar(true);
          ventaEqui.estadoBotonModificar(false);
          ventaEqui.estadoBotonEliminar(false);
        
           
        }

}
    
 public void cargarNadadoresTxt(Equipo equi) {   
   
 if (equi.getLista().size()>0)
     vista.MensajesGenerales.mostrarMensaje("Ya la equipo posee" + equi.getLista().size()+"  Nadadores");
     else{
      FileReader fr = null;
      BufferedReader br = null;
      
      
        
           JFileChooser fileChooser = new JFileChooser(); //cuadro de dialogo
            int seleccion = fileChooser.showOpenDialog(areaTexto);
              if (seleccion == JFileChooser.APPROVE_OPTION)
                {
                  File fichero = fileChooser.getSelectedFile();
               
       try {
     

             fr = new FileReader(fichero);
             br= new BufferedReader(fr);

           
      String ArrLineas[];
      ArrLineas = new String[ 7 ];
        
         int contador=0;
         // Lectura del fichero
         String linea;
       
        
         while((linea=br.readLine())!=null )
         {
           
             
           
              ArrLineas[contador++]=linea;        
              if (contador==7)
                {
                   int tiempo=Integer.parseInt(ArrLineas[6]);
                  
                 agregarNadadoresAlEquipoXTxt(equi,ArrLineas[0], ArrLineas[1],ArrLineas[2],ArrLineas[3],ArrLineas[4],ArrLineas[5],tiempo);
          
                 contador=0;
              }
           
            }
              vista.MensajesGenerales.mostrarMensaje("cargados con exito");
               ventaEqui.estadoBotonNadadores(false); 
       }
      catch(Exception e){
      }finally{
         try{                    
            if( null != fr ){   
               fr.close();     
            }                  
         }catch (Exception e2){ 
         }
}
     
   
   }else
                  
       vista.MensajesGenerales.mostrarMensaje("error al leer el archivo");
   
 } 
 } 
  

public  void agregarNadadoresAlEquipoXTxt(Equipo equi, String cedula,  String nombre,String apellido,String fecha_naci,String sexo ,String especialidad,int tiempo) 
{

    Nadador nadador = new Nadador(); 
    nadador.setCedula(cedula) ;
    nadador.setNombre(nombre);
    nadador.setApellido(apellido);
    nadador.setFecha_naci(fecha_naci);
    nadador.setSexo(sexo);
    nadador.setEspecialidad(especialidad);
    nadador.setTiempo(tiempo);
    equi.getLista().add(nadador);
}


public void modificarEquipo(String codigo, String ano,String pais,String nombreEntrenador) 
 {
  boolean encon=false;
  Equipo equi=null;
   String codi;
   int j;
   

   for (j = 0; j <  ListaEquipo.size() && !encon; j++) 
   {
     equi=(Equipo)ListaEquipo.get(j);
     codi=equi.getCodigoEqi();
    
     if (codi.equals(codigo.trim())){ 
       encon=true;  
        equi.setAno(ano);
        equi.setNombre_entrenador(nombreEntrenador);
        equi.setPais(pais);
        ListaEquipo.set(j, equi);
        vista.MensajesGenerales.mostrarMensaje("Equipo Modificado");
        
}
      
   }  
   
 }

public void eliminarEquipo(String codigo) 
 {
  boolean encon=false;
  Equipo equi=null;
   String codi;
   int j;
   

   for (j = 0; j <  ListaEquipo.size() && !encon; j++) 
   {
     equi=(Equipo)ListaEquipo.get(j);
     codi=equi.getCodigoEqi();
    
     if (codi.equals(codigo.trim())){ 
       encon=true;  
       if(equi.getLista().size()==0){
       
        ListaEquipo.remove(j);
        vista.MensajesGenerales.mostrarMensaje("Equipo Eliminado");
       }else{
       vista.MensajesGenerales.mostrarMensajeErrores("No se puede eliminar el equipo posee nadadores");
       } 
    }
      
   }
   
 }

public boolean validar(){

    
    if(ventaEqui.getEntrenador().length()==0 ){
        return false;
    }else
      if(ventaEqui.getPais().length()==0){
          return false;
    
}else if(ventaEqui.getAnoFed().length()==0){
      return false;
     
}else
    return true;
        
 }
}





